package com.example.myapplication;

import android.util.Log;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import com.google.gson.Gson;

// 登录页ViewModel（MVVM的核心：处理业务逻辑，不持有Activity引用）
public class LoginViewModel extends ViewModel {
    private static final String TAG = "LoginViewModel";
    private final Gson gson = new Gson(); // JSON解析工具

    // 1. 状态封装（加载中/成功/失败，给Activity观察）
    public enum RequestState { LOADING, SUCCESS, FAILURE }
    public static class UiState {
        public RequestState state;
        public String message; // 提示信息（如“正在登录”“登录失败：xxx”）
        public String token; // 登录/注册成功后的token（用于自动登录）

        // 构造方法（简化创建）
        public UiState(RequestState state, String message) {
            this.state = state;
            this.message = message;
        }
        public UiState(RequestState state, String message, String token) {
            this.state = state;
            this.message = message;
            this.token = token;
        }
    }

    // 2. LiveData（给Activity观察，更新UI）
    private final MutableLiveData<UiState> loginState = new MutableLiveData<>();
    private final MutableLiveData<UiState> registerState = new MutableLiveData<>();
    private final MutableLiveData<UiState> autoLoginState = new MutableLiveData<>();

    // 暴露不可变的LiveData（防止Activity直接修改）
    public LiveData<UiState> getLoginState() { return loginState; }
    public LiveData<UiState> getRegisterState() { return registerState; }
    public LiveData<UiState> getAutoLoginState() { return autoLoginState; }

    // 3. 登录逻辑（供Activity调用）
    public void login(String email, String password) {
        // 1. 发送“加载中”状态
        loginState.postValue(new UiState(RequestState.LOADING, "正在登录中..."));

        // 2. 构造登录请求参数（转JSON）
        LoginRequest request = new LoginRequest(email, password);
        String jsonParams = gson.toJson(request);

        // 3. 调用网络工具类发送POST请求
        HttpUtil.sendPostRequest(HttpUtil.LOGIN_URL, jsonParams, new HttpUtil.HttpCallback() {
            @Override
            public void onSuccess(String response) {
                // 解析响应结果
                LoginResponse loginResponse = gson.fromJson(response, LoginResponse.class);
                if (loginResponse.isSuccess()) {
                    // 登录成功：发送“成功”状态，携带token
                    loginState.postValue(new UiState(
                            RequestState.SUCCESS,
                            "登录成功！",
                            loginResponse.getToken()
                    ));
                } else {
                    // 登录失败：发送“失败”状态，携带错误信息
                    loginState.postValue(new UiState(
                            RequestState.FAILURE,
                            "登录失败：" + loginResponse.getError()
                    ));
                }
            }

            @Override
            public void onFailure(String errorMsg) {
                // 网络异常：发送“失败”状态
                loginState.postValue(new UiState(RequestState.FAILURE, errorMsg));
            }
        });
    }

    // 4. 注册逻辑（供Activity调用）
    public void register(String email, String password) {
        // 1. 发送“加载中”状态
        registerState.postValue(new UiState(RequestState.LOADING, "正在注册中..."));

        // 2. 构造注册请求参数（转JSON）
        RegisterRequest request = new RegisterRequest(email, password);
        String jsonParams = gson.toJson(request);

        // 3. 调用网络工具类发送POST请求
        HttpUtil.sendPostRequest(HttpUtil.REGISTER_URL, jsonParams, new HttpUtil.HttpCallback() {
            @Override
            public void onSuccess(String response) {
                RegisterResponse registerResponse = gson.fromJson(response, RegisterResponse.class);
                if (registerResponse.isSuccess()) {
                    // 注册成功：直接跳转首页（和登录逻辑一致）
                    registerState.postValue(new UiState(
                            RequestState.SUCCESS,
                            "注册成功！",
                            registerResponse.getToken()
                    ));
                } else {
                    registerState.postValue(new UiState(
                            RequestState.FAILURE,
                            "注册失败：" + registerResponse.getError()
                    ));
                }
            }

            @Override
            public void onFailure(String errorMsg) {
                registerState.postValue(new UiState(RequestState.FAILURE, errorMsg));
            }
        });
    }

    // 5. 自动登录逻辑（供Activity调用，需要token）
    public void autoLogin(String token) {
        // 1. 发送“加载中”状态
        autoLoginState.postValue(new UiState(RequestState.LOADING, "自动登录中..."));

        // 2. 调用网络工具类发送GET请求（携带token）
        HttpUtil.sendGetRequest(token, new HttpUtil.HttpCallback() {
            @Override
            public void onSuccess(String response) {
                // 自动登录成功（假设响应正确即成功）
                autoLoginState.postValue(new UiState(RequestState.SUCCESS, "自动登录成功！"));
            }

            @Override
            public void onFailure(String errorMsg) {
                // 自动登录失败（如token过期、网络异常）
                autoLoginState.postValue(new UiState(RequestState.FAILURE, errorMsg));
            }
        });
    }
}